// #include "drv_gpio.h"
// #include "drv_public_datas.h"
// #include "drv_sleep.h"

// #define TAG "DRV GPIO"

// static const char *power_str[] = {
//     "POWER KEY",
//     "POWER USB",
//     "POWER SF32",
//     "POWER ADC",
// };

// static const char *en_str[] = {
//     "DISABLE",
//     "ENABLE",
// };

// static void gpio_it_cb(gpio_t io)
// {
//     if (drv_sleep_get_state() == DISABLE)
//         return;
//     switch (io)
//     {
//     case BTN_POWER:
//         drv_sleep_set_wake_reason(WAKE_BY_BTN);
//         break;
//     case BTN_USB:
//         drv_sleep_set_wake_reason(WAKE_BY_USB);
//         break;
//     default:
//         break;
//     }
// }

// void drv_gpio_power_set(gpio_power_t power, en_state_t enable)
// {

//     esay_logi(TAG, "%s %s", power_str[power], en_str[enable]);

//     if (enable == ENABLE)
//     {
//         switch (power)
//         {
//         case GPIO_POWER_KEY:
//             if (drv_public_get_datas()->eeprom_datas.key_datas.key_trig_level == LOW)
//             {
//                 gpio_set_mode(KEY_USER, GPIO_MODE_IN_FLOAT);
//                 gpio_set_mode(KEY_DOOR, GPIO_MODE_IN_FLOAT);
//                 gpio_set_mode(KEY_LOCK, GPIO_MODE_IN_FLOAT);
//                 gpio_set_mode(KEY_UNLOCK, GPIO_MODE_IN_FLOAT);
//             }
//             else
//             {
//                 gpio_set_mode(KEY_USER, GPIO_MODE_IN_PULLDOWN);
//                 gpio_set_mode(KEY_DOOR, GPIO_MODE_IN_PULLDOWN);
//                 gpio_set_mode(KEY_LOCK, GPIO_MODE_IN_PULLDOWN);
//                 gpio_set_mode(KEY_UNLOCK, GPIO_MODE_IN_PULLDOWN);
//             }
//             gpio_set_mode(KEY_POWER, GPIO_MODE_OUT_PUSHPULL_5mA);
//             gpio_set_level(KEY_POWER, 1);
//             // gpio_set_mode(KEY_POWER, GPIO_MODE_IN_PULLUP);
//             // drv_public_get_datas()->key_power_state = ENABLE;
//             break;

//         case GPIO_POWER_ADC:
//             gpio_set_mode(ADC_EN, GPIO_MODE_OUT_PUSHPULL_5mA);
//             gpio_set_level(ADC_EN, 1);
//             break;

//         case GPIO_POWER_SF32:
//             gpio_set_mode(SF32_EN, GPIO_MODE_IN_PULLUP);
//             gpio_set_level(UART_SF32_TXD, 1);
//             gpio_set_mode(UART_SF32_TXD, GPIO_MODE_OUT_PUSHPULL_5mA);
//             gpio_set_mode(UART_SF32_RXD, GPIO_MODE_IN_PULLUP);
//             uart_init(UART_SF32_CH, UART_SF32_BAUDRATE, UART_SF32_TXD, UART_SF32_RXD, NULL);
//             break;

//         case GPIO_POWER_USB:
//             gpio_set_mode(USB_DP, GPIO_MODE_IN_FLOAT);
//             gpio_set_mode(USB_DM, GPIO_MODE_IN_FLOAT);
//             gpio_set_level(UART_DEBUG_TXD, 1);
//             uart_init(UART_DEBUG_CH, UART_DEBUG_BAUDRATE, UART_DEBUG_TXD, UART_DEBUG_RXD, NULL);
//             gpio_set_mode(UART_RTS, GPIO_MODE_IN_FLOAT);
//         default:
//             break;
//         }
//     }
//     else
//     {
//         switch (power)
//         {
//         case GPIO_POWER_KEY:
//             return;
//             gpio_set_mode(KEY_POWER, GPIO_MODE_IN_PULLDOWN);
//             gpio_set_mode(KEY_USER, GPIO_MODE_IN_PULLDOWN);
//             gpio_set_mode(KEY_DOOR, GPIO_MODE_IN_PULLDOWN);
//             gpio_set_mode(KEY_LOCK, GPIO_MODE_IN_PULLDOWN);
//             gpio_set_mode(KEY_UNLOCK, GPIO_MODE_IN_PULLDOWN);
//             // drv_public_get_datas()->key_power_state = DISABLE;
//             break;

//         case GPIO_POWER_ADC:
//             gpio_set_mode(ADC_EN, GPIO_MODE_IN_PULLDOWN);
//             break;

//         case GPIO_POWER_SF32:
//             gpio_set_mode(UART_SF32_TXD, GPIO_MODE_IN_PULLDOWN);
//             gpio_set_mode(UART_SF32_RXD, GPIO_MODE_IN_PULLDOWN);
//             uart_deinit(UART_SF32_CH);
//             gpio_set_mode(SF32_EN, GPIO_MODE_IN_PULLDOWN);
//             break;

//         case GPIO_POWER_USB:
//             gpio_set_mode(USB_DP, GPIO_MODE_IN_PULLDOWN);
//             gpio_set_mode(USB_DM, GPIO_MODE_IN_PULLDOWN);
//             uart_deinit(UART_DEBUG_CH);
//             gpio_set_mode(UART_DEBUG_TXD, GPIO_MODE_IN_PULLDOWN);
//             gpio_set_mode(UART_DEBUG_RXD, GPIO_MODE_IN_PULLDOWN);
//             gpio_set_mode(UART_RTS, GPIO_MODE_IN_PULLDOWN);
//             break;
//         }
//     }
// }

// void drv_gpio_install()
// {

//     gpio_set_mode(SF32_EN, GPIO_MODE_IN_PULLDOWN);
//     gpio_set_mode(ADC_EN, GPIO_MODE_IN_PULLDOWN);
//     gpio_set_mode(KEY_POWER, GPIO_MODE_IN_PULLDOWN);

//     gpio_set_mode(KEY_USER, GPIO_MODE_IN_PULLDOWN);
//     gpio_set_mode(KEY_DOOR, GPIO_MODE_IN_PULLDOWN);
//     gpio_set_mode(KEY_LOCK, GPIO_MODE_IN_PULLDOWN);
//     gpio_set_mode(KEY_UNLOCK, GPIO_MODE_IN_PULLDOWN);

//     gpio_set_mode(UART_RTS, GPIO_MODE_IN_PULLDOWN);
//     gpio_set_mode(USB_DP, GPIO_MODE_IN_PULLDOWN);
//     gpio_set_mode(USB_DM, GPIO_MODE_IN_PULLDOWN);

//     gpio_set_mode(UART_SF32_TXD, GPIO_MODE_IN_PULLDOWN);
//     gpio_set_mode(UART_SF32_RXD, GPIO_MODE_IN_PULLDOWN);
//     gpio_set_mode(ADC_BAT, GPIO_MODE_IN_FLOAT);

//     gpio_set_mode(BTN_POWER, GPIO_MODE_IN_PULLUP);
//     gpio_set_mode(BTN_USB, GPIO_MODE_IN_FLOAT);

//     gpio_register_it_cb(gpio_it_cb);

//     gpio_it_mode(BTN_POWER, IT_FALL_EDGE);
//     gpio_it_mode(BTN_USB, IT_RISE_EDGE);

//     PWR_PeriphWakeUpCfg(ENABLE, RB_SLP_GPIO_WAKE, Short_Delay);

//     drv_gpio_power_set(GPIO_POWER_ADC, ENABLE);
// }
